package com.neuedu.corejava.ch7.abs;
/**
 * <pre>
 * 1、使用abstract修饰的方法叫抽象方法，抽象方法没有方法体(没有大括号)
 * 2、一个类如果包含有抽象方法，这个类必须是抽象类
 *   注意：抽象类可以不包含抽象方法，即抽象类可以同时包含抽象方法和非抽象方法
 * 3、抽象类不能使用new关键字实例化
 * 4、当子类必须实现或重写父类定义的方法时，可把父类定义的方法声明为抽象方法，父类声明为抽象类
 * </pre>
 * @author admin
 *
 */
public abstract class AbstractClass {
	//final和abstract不能同时修饰类
	//使用final修饰的类称为终结类，不能被继承
	private final int id; //使用final修饰的'变量'不能修改，称为常量
	//属性常量需要在定义时进行初始化，一旦被初始化就不能修改，如果没有在定义时初始化，则可以在构造方法中初始化一次
	//final修饰的方法不能被重写
	//抽象方法不能用private修饰，其他修饰符号都可以，抽象方法不能使用static修饰，不能使用final修饰
	abstract void absMethods();//抽象方法没有方法体
	//类属性（使用static修饰的属性）必须在定义时初始化，不能修改（引用不能修改）
	public static final String MAN = "男";
	
	public final void absMethod(){	//使用final修饰的方法称为终结方法，不能被重写	
	}
	
	public AbstractClass(final int id){//final修饰的局部变量或参数不能被修改
		this.id = id;
	}
	public static void main(String[] args) {
		AbstractClass abstractClass = new SubAbstractClass(2);
		abstractClass.absMethods();//抽象类一般由非抽象类的子类进行实例化--多态
	}
}
